﻿using System;
using System.IO;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using jSLCore.Client.Presentation.BaseControl;
using jSLCore.Client.Presentation.BaseControl.DialogMessage;

namespace jSLApp.Client.Forms
{
    public partial class AddMusic : DialogControl
    {
        /// <summary>
        /// Last opened media file Duration
        /// </summary>
        private double _lastTotalSeconds;

        private FileInfo _soundFile;
        

        public AddMusic()
        {
            InitializeComponent();
        }


        public override void OkClicked()
        {
            //Загружаем песенку))
            Validate();
            if(IsValid)
            {
                var soundStream = _soundFile.OpenRead();
                var soundBytes = new byte[soundStream.Length];
                soundStream.Read(soundBytes, 0, soundBytes.Length);
                soundStream.Close();

                DoWork("Идет загрузка файла на сервер...",(sender, args) =>
                                                              {
                                                                  
                                                                 args.Result = Communication.Proxy.AddMusic((string) args.Params[0]
                                                                      ,(byte[]) args.Params[1]
                                                                      ,(double) args.Params[2]);
                                                              },(o, eventArgs) =>
                                                                                    {
                                                                                        InfoBox.ShowDialog("Файл успешно закачан. Для того, что бы он появился в каталоге необходимо установить флаг 'Публичный'");
                                                                                        InvokeDataSelected(eventArgs.Result);
                                                                                    }
                                                                                    ,nameTxt.Text,
                                                                                    soundBytes,
                                                                                    _lastTotalSeconds
                                                                                    );
            }
        }

        public override object OkContent
        {
            get { return "Загрузить на сервер"; }
        }

        public override bool IsStandartOkCancelEnabled
        {
            get { return true; }
        }

        public override void LoadInitialData()
        {
            CustomError = "Необходимо указать звуковой файл.";
            DoWork("Загрузка информации об авторе",(sender, args) =>
                                                       {
                                                           args.Result = Communication.Proxy.GetCurrentAuthorName();
                                                       },(o, eventArgs) =>
                                                             {
                                                                 author.Text = (string) eventArgs.Result;
                                                             });
           
        }

        

        public override bool AutoSize
        {
            get { return true; }
        }
       
        private void browseSound_Clicked(object sender, RoutedEventArgs e)
        {
            var dlg = new OpenFileDialog();
            if (dlg.ShowDialog().GetValueOrDefault(false))
            {


                Stream str;
                try
                {
                    _soundFile = dlg.File;

                }

                catch (DirectoryNotFoundException)
                {
                    ErrorBox.ShowDialog("Указанный файл не найден.");
                    return;
                }
                catch (IOException)
                {
                    ErrorBox.ShowDialog("Файл не доступен.");
                    return;
                }

                soundPath.Content = dlg.File.Name;
                Validate();

                if (dlg.File.Length > 50000000)
                {
                    CustomError = "Размер файла не должен превышать 50 мб";
                    return;
                }

                ShowSplashScreen("Идет проверка файла");
                str = dlg.File.OpenRead();

                

                mediaElement.MediaOpened += (o, args) =>
                                                {
                                                    Thread.Sleep(1000);//user must see the splash screen, it can hide to fast
                                                    CustomError = null;
                                                    _lastTotalSeconds = mediaElement.NaturalDuration.TimeSpan.TotalSeconds;
                                                    str.Close();
                                                    HideSplashScreen();
                                                };

                mediaElement.MediaFailed += (sender1, eventArgs) =>
                                                {
                                                    Thread.Sleep(1000);//user must see the splash screen, it can hide to fast
                                                    CustomError =
                                                        "Указанный файл не может быть воспроизведен. Пожалуйста укажите звуковой файл.";
                                                    str.Close();
                                                    HideSplashScreen();
                                                };
                mediaElement.SetSource(str);
                
                
            }
        }
    }
}
